package main

import (
	"fmt"
)

/*
Go 语言中的 defer 语句会将其后面跟随的语句进行延迟处理。在 defer 归属的函数即将返回
时，将延迟处理的语句按 defer 定义的逆序进行执行，也就是说，先被 defer 的语句最后被
执行，最后被 defer 的语句，最先被执行。

由于 defer 语句延迟调用的特性，所以 defer 语句能非常方便的处理资源释放问题。比如：
资源清理、文件关闭、解锁及记录时间等。
*/
func main() {
	// 栈
	fmt.Println("start")
	defer fmt.Println(1)
	defer fmt.Println(2)
	defer fmt.Println(3)
	fmt.Println("end")
}
